<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>

    <script>

        // 函数本质上也是一种数据类型  
        // var f = function() {}     // 变量就是用来存储数据的

        // 函数属于引用数据类型
        //  f存的是地址


        // 1 函数在声明的时候，会在堆内存中创建一块空间
        // 2 系统会在当前作用域下，创建一个与函数同名的变量，这个变量将会指向堆中函数创建的这块地址
        // 3 函数在调用的时候，通过这个变量取堆中找到对应的地址，并创建对应的执行环境(函数存的是一堆代码)
        // 4 形参开始接收实参
        // 5 预编译阶段
        // 6 函数中的代码开始执行
        // 7 函数执行完毕之后，  执行环境销毁




        function fn() {
            // 在fn 这个作用域下创建了一个函数f   那么这个函数只能再fn中使用
            function f() {
                console.log(1) ;
            }
        }

        fn() ;


        f()



    </script>
    
</body>
</html>